定期ミートアップ 第5回 yhara
発表資料もここに書けばいいのではないか
bugfix release
p 123.class ができるようになった(出力:#<class Int>)
各オブジェクトがクラスオブジェクトへの参照を持つようになった
これでenumのパターンマッチが実装できるぞ〜
仮想関数の呼び出しなどでllvmのbitcast命令が必要
bitcastをミスった場合、llvmレベルではチェックできないので実行バイナリは生成されてしまう
inkwell valueにタグを付けるようにした
code:rust
pub struct SkObj<'run>(pub inkwell::values::BasicValueEnum<'run>);
; TODO: impl Deref SkObj -> BasicValueEnum
pub struct VTableRef<'run>(pub inkwell::values::BasicValueEnum<'run>);
pub struct I8Ptr<'run>(pub inkwell::values::PointerValue<'run>);
「Shiika objectを扱う関数」と「生のllvm値を扱う関数」をRustレベルで区別できるようになった
Metaclass
code:txt
^ ... superclass-subclass relationship
~ ... class-instance relationship
Object Object Object
^ ^ ^
Class ~ Metaclass ~ Metaclass
^
Object ~ Meta:Object ~ Metaclass
^ ^
| |
| |
123 ~ Int ~ Meta:Int ~ Metaclass
両方Classにしてしまうと、たとえばClass.constantsというAPIを追加したときにメタクラスにもconstantsが生えてしまう(例:Int.class.constants)